#pragma once
#ifndef EVENT_H
#define EVENT_H
#include"DateTime.h"
#include<string>
#include<sstream>
#include<ctime>

 
enum Importance{
	LOW, NORMAL, HIGH
};
enum EventType{
	FLOATING,DEADLINE,TIME, SAME
};

//@author A0105735J
const std::string  DONE = "done";
const std::string  OVERDUE = "overdue";
const std::string  PENDING = "pending";

class Event{
protected:
	std::string _name;
	std::string _priority;
	std::string _location;
	std::string _eventStatus;
	// displayID is the ID shown in GUI
	int _displayID;
	// searchID is the unique ID for events, only be used by Command and Receiver class
	int _searchID;
	EventType _eventType;
	
	bool _done;
	

public:
	//void Event();
	void setName(std::string);
	std::string getName();
	DateTime _date;
	
	//@author A0105735J
	void setStatus(std::string);

	//@author A0105735J
	std::string getEventStatus();

	EventType getEventType();
	void setImportanceLevel(std::string);
	std::string getImportanceLevel();
	void setLocation(std::string);
	std::string getLocation();
	virtual Event* clone() const = 0;


	// this section 


	/*
	void setDate(DateTime);
	*/


	// print importance level

	void printImportanceLevel();


	virtual DateTime getTimedEventEndTime();
	virtual DateTime getTimedEventDuration();
	virtual DateTime getTimedEventStartTime();
	virtual void setTimedEventStartTime(DateTime);
	virtual void setTimedEventEndTime(DateTime);
	virtual void setTimedEventDuration(DateTime);

	virtual DateTime getDeadlineEventEndTime();
	virtual void setDeadlineEventEndtime(DateTime);


	virtual void printEvent();

	void setDisplayID(int);
	int getDisplayID();

	void setSearchID(int);
	int getSearchID();

	void setEventType(std::string);
	Event(void);
	~Event(void);
	
	
	void getEventDateTime(int&, int&, int&);
	bool isEventOnDateClicked (int, int ,int);
	std::string getIDInString();
};
#endif
